﻿Imports System.Text.RegularExpressions
Imports StartFrame.Web.BR.Helpers
Imports StartFrame.Web.BR
Imports StartFrame.BR.Web.Helpers

Namespace Mantenimiento.Empresas

    Public Class Entidad
        Inherits JsonAbm

        ''' <summary>
        ''' Esta clase se encarga de la administración de los reportes o consultas contempladas por la aplicación.
        ''' </summary>
        ''' Constructor
        Sub New()
            MyBase.New(Operador, Password, "XREntidad", "App_entidad", "nombre")
            MyBase.lnk_nombreOperador = Common.Env.Operador
            'Graba tracking
            Me.lnk_Tracking = True
        End Sub

        Private Sub Entidad_Validando(ByRef cancela As Boolean, ByRef paramDataTable As System.Data.DataTable) Handles Me.Validando
            Dim row As DataRow

            'Recorre todos los registros de la tabla
            For Each row In paramDataTable.Rows
                If row.RowState <> DataRowState.Deleted Then
                    'Valida campo obligatorio Descripción
                    If IsDBNull(row("nombre")) OrElse row("nombre").ToString = String.Empty Then
                        row.SetColumnError("nombre", "El nombre de la entidad es obligatoria.")
                        cancela = True
                    End If
                    'Valida campo obligatorio Contacto
                    If IsDBNull(row("contacto")) OrElse row("contacto").ToString = String.Empty Then
                        row.SetColumnError("contacto", "El contacto de la entidad es obligatoria.")
                        cancela = True
                    End If
                    'Valida campo obligatorio Domicilio
                    If IsDBNull(row("domicilio")) OrElse row("domicilio").ToString = String.Empty Then
                        row.SetColumnError("domicilio", "El domicilio de la entidad es obligatoria.")
                        cancela = True
                    End If
                    'Valida campo obligatorio Provincia
                    If IsDBNull(row("provincia")) OrElse row("provincia").ToString = String.Empty Then
                        row.SetColumnError("provincia", "La provincia de la entidad es obligatoria.")
                        cancela = True
                    End If
                    'Valida campo obligatorio Tel
                    If IsDBNull(row("tel")) OrElse row("tel").ToString = String.Empty Then
                        row.SetColumnError("tel", "El teléfono de la entidad es obligatoria.")
                        cancela = True
                    End If
                    'Valida campo obligatorio Tel
                    If IsDBNull(row("email")) OrElse row("email").ToString = String.Empty Then
                        row.SetColumnError("email", "El email de la entidad es obligatoria.")
                        cancela = True
                    Else
                        'Valida el campo email
                        Dim campo As String = row("email")
                        Dim val As Boolean = ValidarEmail(campo)
                        If val = False Then
                            row.SetColumnError("email", "Email incorrecto.")
                            cancela = True
                        End If
                    End If
                    'Valida campo obligatorio Localidad
                    If IsDBNull(row("localidad")) OrElse row("localidad").ToString = String.Empty Then
                        row.SetColumnError("localidad", "La localidad de la entidad es obligatoria.")
                        cancela = True
                    End If
                    'Valida campo obligatorio Cp
                    'If IsDBNull(row("cp")) OrElse row("cp").ToString = String.Empty Then
                    'row.SetColumnError("cp", "El código postal de la entidad es obligatoria.")
                    'cancela = True
                    'End If

                    'Valido website
                    If IsDBNull(row("website")) OrElse row("website").ToString = String.Empty Then
                        row.SetColumnError("website", "")
                    Else
                        Dim camp As String = row("website")
                        Dim valor As Boolean = ValidarUrl(camp)

                        If valor = True Then
                            row.SetColumnError("website", "Url Incorrecta")
                            cancela = True
                        End If
                    End If
                End If
            Next
        End Sub

        'Valida una direccin de email

        Public Function ValidarEmail(ByVal sEmail As String) As Boolean

            Dim i As Integer
            Dim iLen As Integer
            Dim iPosPuntoDominio As Integer
            Dim iPosArroba As Integer

            'Valor por default para 'Exit Function'
            ValidarEmail =
            False

            sEmail = Trim(sEmail)
            'Elimino espacios en blanco

            iLen = Len(Trim(sEmail))
            'Longitud de la direccin de email

            'Al menos 6 caracteres x@x.xx
            If iLen < 5 Then
                Exit Function
            End If

            'Posiciones iniciales
            iPosPuntoDominio = 0
            iPosArroba = 0
            For i = 1 To iLen
                'Control de caracteres
                Select Case Asc(Mid(sEmail, i, 1))
                    Case 65 To 90 'A-Z
                        'Char ok
                    Case 97 To 122 'a-z
                        'Char ok
                    Case 48 To 57 '0-9
                        'Char ok
                    Case 39 'apostrofe
                        'Char ok
                    Case 45 'Guion -
                        'Char ok
                    Case 95 'Guion bajo _
                        'Char ok
                        '/////////////////////////////////////
                        'Punto
                        '/////////////////////////////////////
                    Case 46 'Punto .
                        If i = 1 Then 'El primer char no puede ser punto
                            Exit Function
                        ElseIf i = iLen Then 'El ltimo char no puede ser punto
                            Exit Function
                        Else
                            If i = (iPosArroba + 1) Then 'Punto al lado de @
                                Exit Function
                            ElseIf iPosArroba > 0 Then
                                'Guarda la posicin del punto en el dominio
                                iPosPuntoDominio = i
                            End If
                        End If
                        '/////////////////////////////////////
                        'Arroba @
                        '/////////////////////////////////////
                    Case 64 '@
                        If i = 1 Then 'El primer char no puede ser @
                            Exit Function
                        ElseIf i = iLen Then 'El ltimo char no puede ser @
                            Exit Function
                        Else
                            'Guarda la posicin de @
                            If iPosArroba = 0 Then
                                iPosArroba = i
                            Else
                                'Tiene mas un @!
                                Exit Function
                            End If
                        End If
                    Case Else
                        'char no ok!
                        Exit Function
                End Select
            Next i
            'No tiene punto en el dominio
            If iPosPuntoDominio = 0 Then
                Exit Function
            End If
            'Controla la extension
            If Not EsExtension(Mid(sEmail, iPosPuntoDominio)) Then
                Exit Function
            End If
            'Es vlida la direccin!!
            ValidarEmail =
            True
        End Function


        Public Function EsExtension(ByVal sExtension As String) As Boolean

            Dim EXT As String 'Todas las extensiones reconocidas
            'Vlida al 2005
            'http://www.iana.org/
            'http://data.iana.org/TLD/tlds-alpha-by-domain.txt
            EXT =
            ".ac.ad.ae.af.ag.ai.al.am.an.ao.aq.ar.as.at.au.aw.az" & _
            ".ba.bb.bd.be.bf.bg.bh.bi.bj.bm.bn.bo.br.bs.bt.bv.bw.by.bz" & _
            ".ca.cc.cd.cf.cg.ch.ci.ck.cl.cm.cn.co.cr.cu.cv.cx.cy.cz"
            EXT = EXT &
            ".de.dj.dk.dm.do.dz"
            EXT = EXT &
            ".ec.ee.eg.er.es.et.eu"
            EXT = EXT &
            ".fi.fj.fk.fm.fo.fr"
            EXT = EXT &
            ".ga.gb.gd.ge.gf.gg.gh.gi.gl.gm.gn.gp.gq.gr.gs.gt.gu.gw.gy"
            EXT = EXT &
            ".hk.hm.hn.hr.ht.hu"
            EXT = EXT &
            ".id.ie.il.im.in.io.iq.ir.is.it"
            EXT = EXT &
            ".je.jm.jo.jp"
            EXT = EXT &
            ".ke.kg.kh.ki.km.kn.kr.kw.ky.kz"
            EXT = EXT &
            ".la.lb.lc.li.lk.lr.ls.lt.lu.lv.ly"
            EXT = EXT &
            ".ma.mc.md.mg.mh.mk.ml.mm.mn.mo.mp.mq.mr.ms.mt.mu.mv.mw.mx.my.mz"
            EXT = EXT &
            ".na.nc.ne.net.nf.ng.ni.nl.no.np.nr.nu.nz"
            EXT = EXT &
            ".om"
            EXT = EXT &
            ".pa.pe.pf.pg.ph.pk.pl.pm.pn.pr.ps.pt.pw.py"
            EXT = EXT &
            ".qa"
            EXT = EXT &
            ".re.ro.ru.rw"
            EXT = EXT &
            ".sa.sb.sc.sd.se.sg.sh.si.sj.sk.sl.sm.sn.so.sr.st.su.sv.sy.sz"
            EXT = EXT &
            ".tc.td.tf.tg.th.tj.tk.tl.tm.tn.to.tp.tr.tt.tv.tw.tz"
            EXT = EXT &
            ".ua.ug.uk.um.us.uy.uz"
            EXT = EXT &
            ".va.vc.ve.vg.vi.vn.vu"
            EXT = EXT &
            ".wf.ws"
            EXT = EXT &
            ".ye.yt.yu"
            EXT = EXT &
            ".za.zd.zm.zr.zw"
            EXT = EXT &
            ".com.edu.net.org.mil.gov.biz.pro.int"
            EXT = EXT &
            ".arpa.aero.coop.info.name.museum."
            'Agrega el punto
            If Left(sExtension, 1) <> "." Then sExtension = "." & sExtension
            'En minusculas para evitar errores en la comparacin
            'y entre puntos para garantizar la longitud
            sExtension = LCase(sExtension) &
            "."
            'Control
            EsExtension = (InStr(1, EXT, sExtension) > 0)
        End Function

        Public Function ValidarUrl(ByVal sUrl As String) As Boolean
            Dim re As Regex = New Regex("^(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]", RegexOptions.IgnoreCase)
            Dim m As Match = re.Match(sUrl)
            Dim valorUrl As Boolean
            If m.Captures.Count = 0 Then
                valorUrl = True
            End If

            Return valorUrl
        End Function

        Public Overrides Function List(Start As Integer, Limit As Integer, Orden As String, Filtro As String) As String
            Dim oFiltro As FiltroColeccion = FiltroColeccion.Parse(Filtro)
            If Common.GrupoOperador.ID.Trim.ToUpper() <> "ADMIN" Then
                oFiltro.AgregarEQFilter("id_entidad", Common.EntidadOperador.ID)
            End If
            Return (MyBase.List(Start, Limit, Orden, oFiltro.ToJSON()))
        End Function

    End Class
End Namespace
